# -*- coding: utf-8 -*-
"""
Module Description:行为锁的key的定义
Date: 2015/9/6
Author:Bai Jin Ping

key定义：
1.前缀：
1.1.若是关联到整个服的行为，则使用G_前缀；
1.2.若是仅关联单个玩家的行为，则使用U_前缀；
1.3.若是关联多个玩家的行为，则讨论MU_前缀。

2.一定要对该锁的行为进行详细说明（加锁原因），
包括但不限于预计的执行复杂度的大小/锁时间/锁类型。
2.1.锁类型：
- 系统：指与玩家无关，系统自身的行为
- 玩家：指与玩家行为直接影响的
- 其他：指不好确定的
2.2.锁影响范围
- 全局：指该锁会影响到所有玩家
- 多人：指该锁会影响到多个玩家
- 单人：指该锁会影响到单个玩家
- 其他：指不好确定的


3.有时为了控制锁粒度，需要添加约束条件。如在key中添加某model的Id，此时
在定义时使用的字符串替换方法应当为.format形式，不用%形式。
"""


class SeatLock(object):
    # 行为: 抽取座位
    # 加锁原因: 防止并发
    # 加锁时间: 5s
    # 锁类型: 玩家
    # 影响范围: 全局
    G_SEAT_LOCK = 'G_SEAT_LOCK'


class SeatIdLock(object):
    # 行为: 签到
    # 加锁原因: 防止并发
    # 加锁时间: 5s
    # 锁类型: 玩家
    # 影响范围: 单个座位
    U_SEAT_ID_LOCK = 'U_SEAT_ID_LOCK:{SeatId}'


class Behavior(object):
    # 行为：发生某行为
    # 加锁原因：防止多个同时发生的行为，调用多次后导致玩家行为处理逻辑重复执行
    # 加锁时间：5s
    # 锁类型：玩家
    # 影响范围：单人
    # 锁变量：RoleGuid{角色Id}
    U_BEHAVIOR_EXE = 'U_BEHAVIOR_EXE:{RoleGuid}'


class RankLock(object):
    # 行为：修改排行榜
    # 加锁原因： 防止后台操作排行榜与业务操作排行榜出现冲突
    # 加锁时间: 5s
    # 锁类型：玩家
    # 影响范围： 单记录
    U_RANK_MODIFY_LOCK = 'U_RANK_MODIFY_LOCK:{RoleGuid}'


class RoleLock(object):
    # 行为：创建角色
    # 加锁原因： 防止同一账号创建多个角色
    # 加锁时间： 5s
    # 锁类型： 玩家
    # 影响范围： 全局
    G_ROLE_CREATE_LOCK = 'G_ROLE_CREATE_LOCK'

    # 行为：玩家昵称修改行为锁
    # 加锁原因： 防止有玩家使用相同昵称
    # 加锁时间： 默认
    # 锁类型： 玩家
    # 影响范围： 全局
    G_ROLE_MODIFY_NICKNAME_LOCK = 'G_ROLE_MODIFY_NICKNAME_LOCK'

    # 锁类型：玩家
    # 影响范围：玩家所有数据
    U_ROLE_LOCK = 'U_ROLE_LOCK:{RoleGuid}'

    # 行为：玩家称号修改行为锁
    # 加锁原因： 防止玩家自己，定时任务，新拥有者，同时修改称号
    # 加锁时间： 默认
    # 锁类型： 玩家
    # 影响范围： 玩家
    G_ROLE_MODIFY_TITLE_LOCK = 'G_ROLE_MODIFY_TITLE_LOCK:{RoleGuid}'

    # 行为：玩家时装修改行为锁
    # 加锁原因： 防止玩家自己，定时任务，新拥有者，同时修改时装
    # 加锁时间： 默认
    # 锁类型： 玩家
    # 影响范围： 玩家
    G_ROLE_MODIFY_CLOTHES_LOCK = 'G_ROLE_MODIFY_CLOTHES_LOCK:{RoleGuid}'

    # 行为：玩家头像修改行为锁
    # 加锁原因： 防止玩家自己，定时任务，新拥有者，同时修改头像
    # 加锁时间： 默认
    # 锁类型： 玩家
    # 影响范围： 玩家
    G_ROLE_MODIFY_HEAD_LOCK = 'G_ROLE_MODIFY_HEAD_LOCK:{RoleGuid}'


class DrillFieldLock(object):
    # 行为：校场战斗积分锁
    # 加锁原因： 校场攻击玩家会同时修改校场积分和校场排行榜
    # 加锁时间：默认
    # 锁类型： 玩家
    # 影响范围：多人(两人)
    MU_DRILL_FIELD_BATTLE_LOCK = 'MU_DRILL_FIELD_BATTLE_LOCK:{RoleGuid}'


class BossLock(object):
    # 行为: BOSS攻打锁
    # 加锁： 会同时有多个玩家攻打同一个BOSS
    # 加锁时间: 默认
    # 锁类型: 玩家
    # 影响范围： 多人
    G_BOSS_ATTACK_LOCK = "G_BOSS_ATTACK_LOCK:{BossId}"


class AllianceLock(object):
    # 行为：创建联盟加锁
    # 加锁：会同时有多个玩家起同一个联盟名称
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_ALLIANCE_NAME_LOCK = "MU_ALLIANCE_NAME_LOCK:{Name}"
    # 行为: 联盟人数增减加锁
    # 加锁: 会同时有多个玩家加入或离开联盟
    # 加锁时间: 默认
    # 锁类型：玩家
    # 影响范围： 多人
    MU_ALLIANCE_COUNT_LOCK = "MU_ALLIANCE_COUNT_LOCK:{Id}"
    # 行为: 联盟职位变更加锁
    # 加锁: 会同时有多个玩家进行职位变更操作
    # 加锁时间: 默认
    # 锁类型：玩家
    # 影响范围： 多人
    MU_ALLIANCE_AUTH_LV_LOCK = "MU_ALLIANCE_AUTH_LV_LOCK:{Id}"


class ActivityLock(object):
    # 行为：称号变更
    # 加锁：第一名或定时任务同时修改
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：单人
    TITLE_CHANGE = "TITLE_CHANGE:{ActivityId}"


class CrossLeaderBoard(object):
    # 行为：初始化跨服榜单
    # 加锁：防止多区服同时启动时，重复初始化
    # 加锁时间：5秒
    # 锁类型：应用级
    # 影响范围：全服
    INIT_CROSS_LEADER_BOARD = 'INIT_CROSS_LEADER_BOARD'


class AllianceBattleLock(object):
    # 行为：创建盟战活动
    # 加锁：防止后台和定时任务同时执行
    # 加锁时间：10秒
    # 锁类型：系统
    # 影响范围：全局
    G_Alliance_Battle_Lock = "G_Alliance_Battle_Lock"


class ImperialGardenLock(object):
    # 行为：初始化御花园数据
    # 加锁：防止玩家同时进入初始化
    # 加锁时间：默认
    # 锁类型：系统
    # 影响范围：全局
    G_IMPERIAL_GARDEN_INIT_LOCK = "G_IMPERIAL_GARDEN_INIT_LOCK"
    # 行为：计算御花园排名
    # 加锁：防止玩家重复计算
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_CALCULATE_IMPERIAL_GARDEN_RANK_LOCK = "MU_CALCULATE_IMPERIAL_GARDEN_RANK_LOCK{TableId}"


class DinnerLock(object):
    # 行为：赴宴时加锁
    # 加锁：防止多个玩家在同一个位置赴宴
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_DINNER_LOCK = "MU_DINNER_LOCK:{DinnerId}"


class FriendLock(object):
    # 行为：申请对方为友邦
    # 加锁：防止双方互相发送申请
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_APPLY_FRIEND_LOCK = "MU_APPLY_FRIEND_LOCK:{RoleGuid}"
    # 行为：添加为好友
    # 加锁：会同时有多个玩家对一个玩家进行添加为好友的操作
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_ADD_FRIEND_LOCK = "MU_ADD_FRIEND_LOCK:{RoleGuid}"
    # 行为：拜访时增加好友亲密度
    # 加锁：好友双方会同时对好友亲密度进行增加的操作
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人（2个）
    MU_ADD_FRIEND_INTIMACY_LOCK = "MU_ADD_FRIEND_INTIMACY_LOCK:{InfoId}"


class RuinsLock(object):
    # 行为：打开宝箱
    # 加锁：防止一个宝箱被多人打开
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：多人
    MU_OPEN_CHEST_LOCK = "MU_OPEN_CHEST_LOCK:{RuinsId}:{SquareScope}:{SquareNum}"


class CrossSiege(object):
    # 行为：修改城池等级
    # 加锁：防止多人同时修建城池
    # 加锁时间：默认
    # 锁类型：系统
    # 影响范围：全局
    BUILD_CITY = "BUILD_CITY:{act_id}"


class PrinceMarry(object):
    # 行为：增加、删除皇子招亲池数据
    # 加锁：防止招亲池数据被复写
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：玩家招亲池数据
    U_Prince_Seek_Pool = "U_Prince_Seek_Pool:{RoleGuid}"


class CashTimeLimitGift(object):
    # 行为：创建区服限时现金礼包配置
    # 加锁原因： 防止多人同时创建限时现金礼包配置
    # 加锁时间： 默认
    # 锁类型： 玩家
    # 影响范围： 全局
    G_CREATE_CASH_TIME_LIMIT_GIFT_LOCK = 'G_CREATE_CASH_TIME_LIMIT_GIFT_LOCK'


class LimitFund(object):
    # 行为：校验限时清帝/清妃基金
    # 加锁：防止轮询/与国力增长事件同时校验限时基金触发条件
    # 加锁时间：默认
    # 锁类型：玩家
    # 影响范围：单人
    U_CREATE_LIMIT_FUND_LOCK = "U_CREATE_LIMIT_FUND_LOCK:{RoleGuid}:{FundType}"
